package xyx.ysfwpt.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Controller;
import xyx.ysfwpt.model.User;
import xyx.ysfwpt.service.UserService;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;

/*
项目需求：锁定账号半小时后自动解锁
因此需要一个定时触发的方法，每半小时检测用户的locktime
如果当前时间 - locktime > 30分钟
即账户已经被锁定30分钟了
那么将islock2置为-1，locktime置为“”
考虑到检测时间间隔的问题：
  如10：00系统检测完，10:01用户账号被锁定，理论上10:31账号会自动解锁
  但是系统在10:30检测时判定账号继续锁定，下一次检测在11:00，该账号才会解锁，此时锁定了59分钟，超过30分钟
因此检测时间间隔设置为5分钟
这样账户最高锁定时间为34分钟
*/

@Controller
public class TimeController {

    @Autowired
    UserService userService;

    //每隔5分钟执行一次
    @Scheduled(cron = "0 0/5 * * * ?")
    public void automatic_unlocking(){

        //设置日期格式
        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

        //获取所有被锁定账号的信息
        List list = userService.selectIsLock2(0);

        //初始化参数
        User user = new User();
        Integer job_number = 0;
        String locktime = "";
        String nowtime = "";
        long locktime_hm = 0;
        long nowtime_hm = 0;

        //循环，判断每一个锁定用户的锁定时间是否已经达到30分钟
        for(int i = 0;i < list.size();i ++) {
            user = (User) list.get(i);
            job_number = user.getJob_number();
            locktime = user.getLocktime();
            nowtime = df.format(new Date());

            //将两个时间转换为毫秒值进行比较
            try {
                locktime_hm = df.parse(locktime).getTime();
                nowtime_hm = df.parse(nowtime).getTime();
            } catch (ParseException e) {
                e.printStackTrace();
            }

            if((nowtime_hm - locktime_hm) >= 1800000){
                //到达解锁时间，根据job_number将islock置为-1，locktime置为“”
                userService.updateIsLock2(job_number,-1,"");
            }
        }
    }

}